﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Bibilioteca.DataAccess;
using Bibilioteca.Models;
using System.Data;

namespace Bibilioteca.Dominio
{
    public class NegocioEjemplares
    {
        private EjemplaresDao ejemplaresDao;
        
        public NegocioEjemplares()
        {
            ejemplaresDao = new EjemplaresDao();
        }

        /*
         * Genera a partir de un dataTable un LinkedList.
         * Esto es simplemente porque desde la vista no se puede iterar
         * sobre un datatable, se necesita una coleccion de ejemplares.
         */
        private LinkedList<Ejemplar> generarListaEjemplares(DataTable tabla)
        {
            LinkedList<Ejemplar> retorno = new LinkedList<Ejemplar>();
            foreach (DataRow row in tabla.Rows)
            {
                Ejemplar s = new Ejemplar(Convert.ToInt32(row["ejemplar_id"]), 
                                        Convert.ToString(row["ejemplar_estado"]), 
                                        Convert.ToInt32(row["ejemplar_material_id"])
                                        );
                retorno.AddLast(s);
            }
            return retorno;
        }

        /*
         * Retorna una lista enlazada de todos los ejemplares en la BD.
         */
        public LinkedList<Ejemplar> todosLosEjemplares()
        {
            return generarListaEjemplares(ejemplaresDao.todosLosEjemplares());
        }

        public LinkedList<Ejemplar> GetEjemplaresDeMaterial(string id)
        {
            ejemplaresDao.materialID = Convert.ToInt32(id.Trim());
            return generarListaEjemplares(ejemplaresDao.GetEjemplarFiltros(0));
        }

        /*
         * Dado un numero de ejemplar lo busca en la BD y lo retorna.
         */
        public Ejemplar GetEjemplarNumero(string id)
        {
            ejemplaresDao.paramID = Convert.ToInt32(id.Trim());
            DataTable ejemplarTable = ejemplaresDao.GetEjemplarNumero();
            foreach (DataRow row in ejemplarTable.Rows)
            {
                Ejemplar s = new Ejemplar(Convert.ToInt32(row["ejemplar_id"]), 
                                        Convert.ToString(row["ejemplar_estado"]), 
                                        Convert.ToInt32(row["ejemplar_material_id"])
                                        );
                return s;
            }
            return new Ejemplar(0,"",0);
        }

        public void modificarEjemplar(Ejemplar ejemplar)
        {
            ejemplaresDao.paramID = ejemplar.Id;
            ejemplaresDao.estado = ejemplar.Estado;
            ejemplaresDao.materialID = ejemplar.SelectedMaterial;
            
            if (ejemplar != null && ejemplar.Id != 0)
                ejemplaresDao.modificarEjemplar();
        }

        public void insertarEjemplar(Ejemplar ejemplar, int cantidad)
        {
            ejemplaresDao.estado = "Disponible";
            ejemplaresDao.materialID = ejemplar.SelectedMaterial;

            ejemplaresDao.insertarEjemplar(cantidad);
        }

        public void eliminarEjemplar(int id)
        {
            ejemplaresDao.paramID = id;
            if (id != 0)
                ejemplaresDao.eliminarEjemplar();
        }

    }
}